昨天已經介紹了如何使用在執行 docker run
指令,把 Volume Mount 起來使得 Container 的資料夾路徑可以 Mapping 到實體主機的資料夾路徑,今天要介紹的部份是透過撰寫 Dockerfile 的方式使用 Volume 的指令,這樣使用者就不用在執行 docker run
指令時指定 -v
參數,就可以把 Volume Mount 起來。
另外今天還會 Demo 如何讓 Container 之間的資料共享
Example1:
撰寫一個 Dockerfile 使用 VOLUME
指令,把 Docker的Image Build起來,然後啟動 Docker Container,把資料寫進在 Docker Container裡面,最後使用 docker inspect
指令,找到 Mapping 到實體主機的資料夾路徑,確認是否有看到之前寫在 Container 裡面的檔案。
FROM centos
VOLUME ["/storage"]
另外在 VOLUME
指令的寫法可以寫成多個路徑,如下
VOLUME ["/storage1", "/storage2", "/storage2"]
$ docker build -t volumetest .
輸入 docker build 指令時,資料夾要切換到和 Dockerfile 檔案同一層的資料夾路徑,Build 完 Image 之後的結果如下畫面
$ docker run -it volumetest /bin/bash
因為 VOLUME 已經寫在 Dockerfile 裡,所以在使用 docker run
指令時沒有給 -v
參數
在 Container 裡面寫入一個檔案,如下畫面
在實體主機上使用 docker inspect
指令,找到 Volume 在實體主機的資料夾路徑
e2987aaab700
為 ContainerID,也可以使用指定 Container Name 的方式
helloworld.txt
的檔案,畫面如下Example2:
如何讓 Container 和 Container 之間的資料共享,可以使用以下的方式
$ docker run -it -v /data --name=container1 centos /bin/bash
$ docker run -it --volumes-from container1 --name=container2 centos /bin/bash
--volumes-from
參數指定 Container Name 為 Container1 的 Volume 資料和Container2 做共享
左邊的 Container1 切換到 /data
資料夾之後建立一個 helloworld.txt 的檔案,之後在右邊的 Container2 切換到 /data
資料夾之後查看 helloworld.txt
的檔案內容為 HELLOWORLD
,這樣就代表了 Container 之間的資料有做到共享的效果。
今天介紹了 Dockerfile Volume 的用法以及 Container 之間的資料做共享,不用另外的架設 file server 就可以分享資料,使資料在使用上更加的方便,對於在備份資料方面也更加的簡單。